package com.leetcode.www;

import java.util.Stack;

/**
 * Creared with IntelliJ IDEA.
 * Description:根据 逆波兰表示法，求表达式的值。
 *
 * 有效的算符包括+、-、*、/。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 *
 *
 * 说明：
 *
 * 整数除法只保留整数部分。
 * 给定逆波兰表达式总是有效的。换句话说，表达式总会得出有效数值且不存在除数为 0 的情况。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/evaluate-reverse-polish-notation
 * User:yxd
 * Date:2022-01-15
 * Time:20:47
 */
public class Normal150 {
    public static void main(String[] args) {
        String[] s = {"4","13","5","/","+"};
        System.out.println(evalRPN(s));
    }
    public static int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(int i = 0;i < tokens.length ;i ++){
            String val = tokens[i];//每一个字符串
            int sum = 0;
            if(!iso(val)){//不是运算符
                stack.push(Integer.parseInt(val));//数字放入栈中
            }else{
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch(val){//各个运算符  先出来的数放运算符右边

                    case"+":
                        sum = num1 + num2;
                        stack.push(sum);
                        break;

                    case"-":
                        sum = num1 - num2;
                        stack.push(sum);
                        break;
                    case"*":
                        sum = num1 * num2;
                        stack.push(sum);
                        break;
                    case"/":
                        sum = num1 / num2;
                        stack.push(sum);
                        break;

                }

            }

        }
        return stack.pop();//最后的结果
    }
    public static boolean iso(String val){//判断是否是运算符
        if(val.equals("+")||val.equals("-")||val.equals("*")||val.equals("/")){     return true;

        }
        return false;
    }
}
